#pragma once

#include <QPainter>

// 基本游戏物体
class BaseGameObject {
    // 移动结果
    public: enum MoveResult {
        CANNOT_MOVE,        // 本身不具有移动能力
        NO_MOVE,            // 没有移动
        NORMAL_MOVED,       // 正常移动
        ARRIVED_ON_DEST,    // 移动到目标上
        LEFT_FROM_DEST      // 离开目标
    };

    // 类型
    public: enum Type {
        NOTHING,        // 什么也没有
        WALL,           // 墙
        BACKGROUND,     // 背景
        DESTINATION,    // 箱子的目的地
        BOX,            // 箱子
        MAN             // 小人
    };

    protected: QPixmap* mBitmap;    // 后台缓冲位图
    protected: QPainter mDrawer;    // 绘图者
    protected: QImage mImage;       // 图片
    protected: Type mType;          // 类型
    protected: int mX;              // 横向坐标
    protected: int mY;              // 纵向坐标

    public: BaseGameObject(QPixmap*, Type, int, int);
    public: virtual ~BaseGameObject();
    public: void draw();
    public: Type getType();
    public: virtual BaseGameObject* move(int, MoveResult*);
};
